/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package BeansGerenciaveis;

import DAO.ImagemDao;
import DAO.MetaavaliacaoDAO;
import DAO.PDFDao;
import bean.Imagem;
import bean.Metaavaliacao;
import bean.PDF;
import java.io.EOFException;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import org.apache.commons.io.IOUtils;
import org.primefaces.event.FileUploadEvent;
import org.primefaces.model.UploadedFile;

/**
 *
 * @author jorgepereira
 */
@ManagedBean
@ViewScoped
public class MetaavaliacaoBean {

    /**
     * Creates a new instance of MetaavaliacaoBean
     */
    private Metaavaliacao metaavaliacao;
    private ArrayList<Metaavaliacao> metaavaliacoes;
    private ArrayList<String> tipos;

    public String getAcao() {
        if (metaavaliacao.getId() > 0) {
            return "Alterar";
        } else {
            return "Cadastrar";
        }
    }
    
    

    public MetaavaliacaoBean() {
        this.metaavaliacao = new Metaavaliacao();
        this.tipos = new ArrayList<String>(Arrays.asList("Encontro", "Seminário", "Reunião Interna", "Evento Organizado", "Evento Co-organizado", "Palestra", "Conferência", "Apresentação de Trabalho", "Produção Bibliográfica sobre o Observatório", "Produção Bibliográfica produzida pelo Observatório"));
        metaavaliacao.setAnexo1(new PDF());
        metaavaliacao.setAnexo2(new PDF());
        metaavaliacao.setAnexo3(new PDF());
    }

    public Metaavaliacao getMetaavaliacao() {
        return metaavaliacao;
    }

    public void setMetaavaliacao(Metaavaliacao noticia) {
        this.metaavaliacao = noticia;
    }

    public void doUploadPDF1(FileUploadEvent event) {
        try {
            System.out.println("UploadRelatorio Testando");
            UploadedFile file = event.getFile();
            if (!file.getFileName().isEmpty()) {
                if (new PDFDao().validarInsercaoPdf(file.getFileName())) {
                    System.out.println("Dados: " + file.getFileName() + file.getContentType());
                    metaavaliacao.setAnexo1(new PDF());
                    metaavaliacao.getAnexo1().setConteudo(readFully(file.getInputstream(), (int) file.getSize(), true));
                    metaavaliacao.getAnexo1().setNome(file.getFileName());
                    metaavaliacao.getAnexo1().setId(0);
                    
                    FacesContext facesContext = FacesContext.getCurrentInstance();
                    facesContext.addMessage(null, new FacesMessage("Aquivo Recebido com Sucesso", ""));
                } else {
                    FacesContext facesContext = FacesContext.getCurrentInstance();
                    facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro:", "Já existe uma pdf cadastrado com esse nome! "));
                }

            }

        } catch (Exception ex) {
            Logger.getLogger(CursoBean.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    public void doUploadPDF2(FileUploadEvent event) {
        try {
            System.out.println("UploadRelatorio");
            UploadedFile file = event.getFile();
            if (!file.getFileName().isEmpty() ){
                if (new PDFDao().validarInsercaoPdf(file.getFileName())) {
                    System.out.println("Dados: " + file.getFileName() + file.getContentType());
                    metaavaliacao.setAnexo2(new PDF());
                    metaavaliacao.getAnexo2().setConteudo(readFully(file.getInputstream(), (int) file.getSize(), true));
                    metaavaliacao.getAnexo2().setNome(file.getFileName());
                    metaavaliacao.getAnexo2().setId(0);
                    FacesContext facesContext = FacesContext.getCurrentInstance();
                    facesContext.addMessage(null, new FacesMessage("Aquivo Recebido com Sucesso", ""));
                } else {
                    FacesContext facesContext = FacesContext.getCurrentInstance();
                    facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro:", "Já existe uma pdf cadastrado com esse nome! "));
                }

            }

        } catch (Exception ex) {
            Logger.getLogger(CursoBean.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    public void doUploadPDF3(FileUploadEvent event) {
        try {
            System.out.println("UploadRelatorio Avalização");
            UploadedFile file = event.getFile();
            if (!file.getFileName().isEmpty()) {
                if (new PDFDao().validarInsercaoPdf(file.getFileName())) {
                    System.out.println("Dados: " + file.getFileName() + file.getContentType());
                    metaavaliacao.setAnexo3(new PDF());
                    metaavaliacao.getAnexo3().setConteudo(readFully(file.getInputstream(), (int) file.getSize(), true));
                    metaavaliacao.getAnexo3().setNome(file.getFileName());
                    metaavaliacao.getAnexo3().setId(0);
                    FacesContext facesContext = FacesContext.getCurrentInstance();
                    facesContext.addMessage(null, new FacesMessage("Aquivo Recebido com Sucesso", ""));
                } else {
                    FacesContext facesContext = FacesContext.getCurrentInstance();
                    facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro:", "Já existe uma pdf cadastrado com esse nome! "));
                }

            }

        } catch (Exception ex) {
            Logger.getLogger(CursoBean.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void cadastrarAlterarMetaavaliacao() {
        System.out.println("Id noticia: " + metaavaliacao.getId());
        
        if (new MetaavaliacaoDAO().cadastrarAlterar(metaavaliacao) == true) {
            FacesContext facesContext = FacesContext.getCurrentInstance();
            if (metaavaliacao.getId() > 0) {
                metaavaliacao = new MetaavaliacaoDAO().selecionar(metaavaliacao.getId());
                facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Notícia alterada com Sucesso", ""));
            } else {

                facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Notícia cadastrada com Sucesso", ""));
                this.metaavaliacao = new Metaavaliacao();
            }
            
        } else {
            FacesContext facesContext = FacesContext.getCurrentInstance();
            facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Atenção", "Ocorreu um erro e não foi possível efetuar a operação"));
        }

    }

    public static byte[] readFully(InputStream is, int length, boolean readAll)
            throws IOException {
        byte[] output = {};
        if (length == -1) {
            length = Integer.MAX_VALUE;
        }
        int pos = 0;
        while (pos < length) {
            int bytesToRead;
            if (pos >= output.length) { // Only expand when there's no room
                bytesToRead = Math.min(length - pos, output.length + 1024);
                if (output.length < pos + bytesToRead) {
                    output = Arrays.copyOf(output, pos + bytesToRead);
                }
            } else {
                bytesToRead = output.length - pos;
            }
            int cc = is.read(output, pos, bytesToRead);
            if (cc < 0) {
                if (readAll && length != Integer.MAX_VALUE) {
                    throw new EOFException("Detect premature EOF");
                } else {
                    if (output.length != pos) {
                        output = Arrays.copyOf(output, pos);
                    }
                    break;
                }
            }
            pos += cc;
        }
        return output;
    }

    public ArrayList<Metaavaliacao> getMetaavaliacaos() {
        if(metaavaliacoes == null){
            metaavaliacoes = (ArrayList<Metaavaliacao>) new MetaavaliacaoDAO().buscarTodas();
        }
        
        return metaavaliacoes;
    }

    public void setMetaavaliacaos(ArrayList<Metaavaliacao> noticias) {
        this.metaavaliacoes = noticias;
    }
    
    public String selecionar() {
        String resultado = "";
        
        this.metaavaliacao = new MetaavaliacaoDAO().selecionar(this.metaavaliacao.getId());
        //disciplina = new DisciplinasGS();
        resultado = "cadastrar?faces-redirect=true&amp;includeViewParams=true";
        return resultado;
    }
    
    public String lerMetaavaliacao() {
        String resultado = "";
        
        this.metaavaliacao = new MetaavaliacaoDAO().selecionar(this.metaavaliacao.getId());
        //disciplina = new DisciplinasGS();
        resultado = "/visualizarmeta?faces-redirect=true&amp;includeViewParams=true";
        return resultado;
    }
    
    public String visualizarSite(){
        String resultado = "";
        
        this.metaavaliacao = new MetaavaliacaoDAO().selecionar(this.metaavaliacao.getId());
        
        resultado = "visualizar_meta?faces-redirect=true&amp;includeViewParams=true";
        return resultado;
    }

    public ArrayList<Metaavaliacao> getMetaavaliacoes() {
        return metaavaliacoes;
    }

    public void setMetaavaliacoes(ArrayList<Metaavaliacao> metaavaliacoes) {
        this.metaavaliacoes = metaavaliacoes;
    }

    public ArrayList<String> getTipos() {
        return tipos;
    }

    public void setTipos(ArrayList<String> tipos) {
        this.tipos = tipos;
    }
    
    
    

}
